/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import modelos.ModeloCategoria;
import modelos.ModeloIngrediente;

/**
 *
 * @author usuario
 */
public class ControladorProducto implements ActionListener{

    private vistas.VIstaProducto vista;
    private modelos.ModeloProducto modelo;
    private LinkedList <ModeloCategoria> categorias;
    private final LinkedList<modelos.ModeloProducto> productos;
    private LinkedList<ModeloIngrediente> ingredientes;
    private Vector<String> fila;
    private DefaultTableModel modeloTabla;

    public ControladorProducto(vistas.VIstaProducto aThis) {
        vista=aThis;
        modelo= new modelos.ModeloProducto();
        categorias= new ModeloCategoria().listar();
        productos = new  modelos.ModeloProducto().listar();
        ingredientes= new  ModeloIngrediente().listar();
        cargarDescripciones();
        vista.addListener(this);
        modeloTabla = new DefaultTableModel();
        vista.getTblIngrediente().setModel(modeloTabla);
        fila =new Vector<String>();
        fila.add("Ingrediente");
        fila.add("Cantidad");
        modeloTabla.setColumnIdentifiers(fila);
        
    }


     public LinkedList<String []> getInfoTabla(){
        LinkedList<String []> v = new LinkedList<String[]>();
        for (int i = 0; i < modeloTabla.getRowCount(); i++){
            String [] s = new String [] {""+modeloTabla.getValueAt(i, 0),""+modeloTabla.getValueAt(i, 1)};
            v.add(s);
         }
         return v;
    }

    public void cargarDescripciones(){
        Vector<String> descripciones = new Vector<String>();
        for (int i = 0; i < ingredientes.size(); i++)
            descripciones.add(ingredientes.get(i).getDescripcion());
        cargarCombo(vista.getCmbIngredientes(),descripciones);
        descripciones = new Vector<String>();
        for (int i = 0; i < categorias.size(); i++)
            descripciones.add(categorias.get(i).getDescripcion());
        cargarCombo(vista.getCmbCategoria(),descripciones);
    }

    public void cargarCombo(JComboBox combo,Vector<String> info){
        for (String string : info) {
            combo.addItem(string);
        }
    }


    public boolean actualizar(){
        for (int i = 0; i < modeloTabla.getRowCount(); i++)
            if(modeloTabla.getValueAt(i, 0).equals(vista.getCmbIngredientes().getItemAt(vista.getCmbIngredientes().getSelectedIndex()))){
               modeloTabla.setValueAt(vista.getCantidad().getText(), i, 1);
               return true;
            }
        return false;
    }

   public void agregarFila(String [] v){
        if(!actualizar()){
                fila= new Vector<String>();
                fila.add(v[0]);
                fila.add(v[1]);
                modeloTabla.addRow(fila);
            }
    }

     public void agregarFila1(String [] v){
        fila= new Vector<String>();
        fila.add(v[0]);
        fila.add(v[1]);
        modeloTabla.addRow(fila);
    }

    public void quitar(){
        int i = vista.getTblIngrediente().getSelectedRow();
        if(i != -1)
            modeloTabla.removeRow(i);
        else
            JOptionPane.showMessageDialog(new JFrame(),"Debe seleccionar el regitstro que desea quitar","Calle Hambre Aeropuerto",JOptionPane.ERROR_MESSAGE);
    }

     public void reiniciar(){
         for (JTextField texto : vista.getTextos()) {
            texto.setText("");
        }
        modeloTabla.setRowCount(0);
        vista.getCmbCategoria().setSelectedIndex(0);
        vista.getCmbIngredientes().setSelectedIndex(0);
     }


     public String buscarCodigoProducto(String descripicion){
        for (int i = 0; i < productos.size(); i++)
            if(productos.get(i).getDescripcion().equals(descripicion))
                return productos.get(i).getId();
        return "";
    }

     public String buscarCodigoCategoria(String descripicion){
        for (int i = 0; i < categorias.size(); i++)
            if(categorias.get(i).getDescripcion().equals(descripicion))
                return categorias.get(i).getCodigo();
        return "";
     }
     
     public String buscarCodigoIngrediente(String descripicion){
        for (int i = 0; i < ingredientes.size(); i++)
            if(ingredientes.get(i).getDescripcion().equals(descripicion))
                return ingredientes.get(i).getID();
        return "";
     }     


     public void actionPerformed(ActionEvent ae) {
        if(ae.getSource().equals(vista.getRegistrar())){
                registrar();

        }
        else if(ae.getSource().equals(vista.getSalir())){
            vista.setVisible(false);
            reiniciar();
        }
        else if(ae.getSource().equals(vista.getMas())){
            agregarFila(vista.getRegistro());
        }
        else if(ae.getSource().equals(vista.getMenos())){
            quitar();
        }
        else{
            reiniciar();
        }
    }

      private void registrar() {
          LinkedList<JTextField> v =vista.getTextos();
       for (Iterator<JTextField> it = v.iterator(); it.hasNext();) {
           JTextField texto = it.next();
           if(texto.getText().equals("")){
                JOptionPane.showMessageDialog(new JFrame(),"Campos vacios","Calle el Hambre Aeropuerto",JOptionPane.INFORMATION_MESSAGE);
                return;
            }
       }
       try{
           if(Double.parseDouble(vista.getPrecio().getText())<=0){
                vista.getCantidad().setText("");
                JOptionPane.showMessageDialog(new JFrame(),"El precio no es valido","Calle el Hambre Aeropuerto",JOptionPane.WARNING_MESSAGE);
                return;
           }
       }catch(NumberFormatException ex){
           JOptionPane.showMessageDialog(new JFrame(),"El precio no es valida","Calle el Hambre Aeropuerto",JOptionPane.WARNING_MESSAGE);
           return;
       }
       modelo.setId(vista.getCodigo().getText());
       modelo.setDescripcion(vista.getDescripcion().getText());
       modelo.setEstatus("A");
       modelo.setPrecio(Float.parseFloat(vista.getPrecio().getText()));
       modelo.setId_cat(buscarCodigoCategoria(""+vista.getCmbCategoria().getItemAt(vista.getCmbCategoria().getSelectedIndex())));
       if(modelo.registar()){
           LinkedList<String> c = new LinkedList<String>();
           LinkedList<Float> p = new LinkedList<Float>();
           LinkedList<String []> f= getInfoTabla();
           for (Iterator<String[]> it = f.iterator(); it.hasNext();) {
                String[] s = it.next();
                c.add(buscarCodigoIngrediente(s[0]));
                p.add(Float.parseFloat(s[1]));
           }
           modelo.registarIngredientes(c, p);
           JOptionPane.showMessageDialog(new JFrame(),"Producto registrado exitosamente","Calle el Hambre Aeropuerto",JOptionPane.INFORMATION_MESSAGE);
           reiniciar();
       }
       else
           JOptionPane.showMessageDialog(new JFrame(),"El codigo o la descripcion ya se encuentra registrada","Calle el Hambre Aeropuerto",JOptionPane.INFORMATION_MESSAGE);
}

  
    

}
